/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polylifegame.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import polylifegame.model.Environnement;
import polylifegame.model.SimulateurManager;

/**
 *
 * @author Arnaud
 */
public class MenuView extends JMenuBar {
    
    //<editor-fold defaultstate="collapsed" desc="Variables de classe">
    //Menu fichier
    private JMenu file;
    
    //Items du menu fichiers
    private JMenuItem newGame;
    private JMenuItem loadGame;
    private JMenuItem saveGame;
    private JMenuItem stop;
    
    //environnement
    private Environnement environnement;
    //simulateur
    private SimulateurManager simulateur;
    //Vue principale
    private VuePrincipale currentView;
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="Constucteurs">
    /**
     * Constructeur
     * @param mainView : Vue principal
     * @param environnementCourant : Environnement courant
     * @param simulateurCourant : Simulater manager courant
     */
    public MenuView(VuePrincipale mainView, Environnement environnementCourant, SimulateurManager simulateurCourant){
        super();
        
        //Références
        this.environnement = environnementCourant;
        this.simulateur = simulateurCourant;
        this.currentView = mainView;
        
        //Instanciation des composants et de leur controller
        this.file = new JMenu("Fichier");
        
        
        this.newGame = new JMenuItem("Nouvelle partie");
        this.newGame.addActionListener(new ActionListener(){
            
            //Initialiser une nouvelle partie
            @Override
            public void actionPerformed(ActionEvent e) {
                simulateur.pause();
                environnement.reinitialiserEnvironnement();
            }
            
        });
        
        
        this.loadGame = new JMenuItem("Charger une partie");
        this.loadGame.addActionListener(new ActionListener(){
            
            //Désérialisation de l'environnement courant => Charger
            @Override
            public void actionPerformed(ActionEvent e) {
                
                JFileChooser fileLoad = new JFileChooser();
                int returnVal = fileLoad.showOpenDialog(currentView);
                
                try{
                    if(returnVal == JFileChooser.APPROVE_OPTION) {
                        FileInputStream fileStream = new FileInputStream(fileLoad.getSelectedFile()); //heres the file data passed in from FilePrompt()
                        ObjectInputStream ois = new ObjectInputStream(fileStream);
                        Environnement loadedEnvironnement = (Environnement) ois.readObject();
                        environnement.setTabCases(loadedEnvironnement.getTabCases());
                    }
                }catch(Exception ex){
                }
            }
            
        });
        
        
        this.saveGame = new JMenuItem("Sauvegarder la partie");
        this.saveGame.addActionListener(new ActionListener(){
            
            //Sérialisation de l'environnement courant => Sauvegarde
            @Override
            public void actionPerformed(ActionEvent e) {
                
                JFileChooser fileSave = new JFileChooser();
                int returnVal = fileSave.showSaveDialog(currentView);
                 
                try{
                    if(returnVal == JFileChooser.APPROVE_OPTION) {
                        FileOutputStream fileStream = new FileOutputStream(fileSave.getSelectedFile()); //heres the file data passed in from FilePrompt()
                        ObjectOutputStream os = new ObjectOutputStream(fileStream);
                        os.writeObject(environnement);
                    }
                }catch(Exception ex){
                }
            }
            
        });
        
        
        this.stop = new JMenuItem("Quitter");
        this.stop.addActionListener(new ActionListener(){
            
            //Quitter l'appliation
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
            
        });
        
        //Placement des composants dans le menu
        this.file.add(this.newGame);
        this.file.add(this.loadGame);
        this.file.add(this.saveGame);
        this.file.addSeparator();
        this.file.add(this.stop);
        
        //Integration des composants dans le menu
        this.add(this.file);
    }
    //</editor-fold>
    
}
